// ----------------------------------
// RSDK Project: Sonic Essence
// Script Description: Pause Menu
// Script Author: Tails LP, Xanman
// ----------------------------------

//-------Aliases-------//
public alias object.value1 : pause.state
public alias object.value2 : pause.xoffset
public alias object.value3 : pause.yoffset
public alias object.value4 : start.fadevalue
public alias object.value5 : pause.alpha
public alias object.value6 : timer

//object states

private alias 0 : NONE
private alias 1 : FADE_IN
private alias 2 : PAUSE_IDLE
private alias 3 : BACK_TO_GAME
private alias 4 : RESTART_STAGE
private alias 5 : BACK_TO_MENU
private alias 6 : RESTART_CHECKPOINT
//-------Function declarations-------//

//-------Static Values-------//

//-------Tables-------//


//-------Functions-------//


event ObjectMain
	switch object.state
	case NONE
		pause.xoffset = screen.xsize
		pause.yoffset = -100
		start.fadeValue = 0
		break
	case FADE_IN

		stage.state = STAGE_PAUSED
		SetActivePalette(2, 0, 255)
		PauseMusic()
		if pause.yoffset < 100
			pause.yoffset += 10
		endif

		if pause.xoffset > 10
			pause.xoffset -= 20
			pause.alpha += 1
		else
			pause.xoffset = 0
			pause.alpha = 30
			object.state = PAUSE_IDLE
		endif
		break
	case PAUSE_IDLE
		timer++
		if object.alpha < 255
			object.alpha+= 50
		end if
		if timer >= 10
			timer = 0
		end if
		if starPostID == 0
			temp5 = 2
		else
			temp5 = 3
		end if

		if inputPress.up == 1
			if pause.state > 0
				pause.state --
			else
				pause.state = temp5
			endif
			PlaySfx(SfxName[Pause Move], 0)
		endif

		if inputPress.down == 1
			if pause.state < temp5
				pause.state ++
			else
				pause.state = 0
			endif
			PlaySfx(SfxName[Pause Move], 0)
		endif

		if inputPress.start == 1
			temp5 = 1
		endif
		if inputPress.ButtonA == 1
			temp5 = 1
		endif
		if inputPress.ButtonB == 1
			temp4 = 1
		endif
		if temp5 == 1
			switch pause.state
			case 0
				object.state = BACK_TO_GAME
				stage.state = STAGE_RUNNING
				stage.pauseenabled = 0
				PlaySfx(SfxName[Pause Select], 0)
				ResumeMusic()
				//SetActivePalette(0, 0, 255)
				break
			case 1
				object.state = RESTART_STAGE
				PlaySfx(SfxName[Pause Select], 0)
				break
			case 2
				if starPostID == 0
					object.state = BACK_TO_MENU
				else
					object.state = RESTART_CHECKPOINT
				end if
				PlaySfx(SfxName[Pause Select], 0)
				break
			case 3
				object.state = BACK_TO_MENU
				PlaySfx(SfxName[Pause Select], 0)
				break
			end switch
			temp5 = 0
		endif
		break
	case BACK_TO_GAME
		SetActivePalette(0, 0, 255)
		if pause.yoffset > -100
			pause.yoffset -= 10
		else
			pause.yoffset = -100
		endif

		if pause.xoffset < 200
			pause.xoffset += 20
			pause.alpha -= 5
		else
			stage.pauseenabled = 1
			object.priority = PRIORITY_INACTIVE
			pause.alpha = 0
			object.alpha = 0
			pause.xoffset = screen.xsize
		endif
		break
	case RESTART_STAGE
		start.fadeValue += 10
		if start.fadeValue >= 300
			StarpostID = 0
			LoadStage()
		endif
		break
	case RESTART_CHECKPOINT
		start.fadeValue += 10
		if start.fadeValue >= 300
			LoadStage()
		endif
		break
	case BACK_TO_MENU
		start.fadeValue += 10
		if start.fadeValue >= 300
			SetActivePalette(0, 0, 255)
			LoadPalette("Global/DefaultPal.act", 0, 0, 0, 255)
			player.score = 0
			StarpostID = 0
			stage.activeList = PRESENTATION_STAGE
			stage.listPos = options.gamemode
			LoadStage()
		endif
		break
	endswitch
end event

event ObjectDraw
	object.inkEffect = INK_ALPHA
	if object.state > 0
		//DrawSpriteScreenXY(0, 24, 220)

		temp0 = screen.xsize
		temp0 += pause.xoffset
		
		DrawSpriteScreenXY(1, temp0, screen.ysize)
		if stage.playerlistpos == 1
			DrawSpriteScreenXY(6, temp0, 116)
		end if
		

		temp1 = 200
		temp1 += pause.xoffset
		if starpostID == 0
			temp2 = 0
		else
			temp2 = -25
		end if
		temp2 +=50
		DrawSpriteScreenFX(2, FX_INK, temp1, temp2)
		if pause.state == 0
			if timer > 5
				DrawSpriteScreenFX(5, FX_INK, temp1, temp2)
			end if
		end if
		temp2 +=50
		DrawSpriteScreenFX(3, FX_INK, temp1, temp2)
		if pause.state == 1
			if timer > 5
				DrawSpriteScreenFX(5, FX_INK, temp1, temp2)
			end if
		end if
		temp2 +=50
		if starpostID == 0
			DrawSpriteScreenFX(4, FX_INK, temp1, temp2)
			if pause.state == 2
				if timer > 5
					DrawSpriteScreenFX(5, FX_INK, temp1, temp2)
				end if
			end if
		else
			DrawSpriteScreenFX(7, FX_INK, temp1, temp2)
			if pause.state == 2
				if timer > 5
					DrawSpriteScreenFX(5, FX_INK, temp1, temp2)
				end if
			end if
		end if
		if starpostID != 0
			temp2 +=50
			DrawSpriteScreenFX(4, FX_INK, temp1, temp2)
			if pause.state == 3
				if timer > 5
					DrawSpriteScreenFX(5, FX_INK, temp1, temp2)
				end if
			end if
		end if
		//Fade out
		DrawRect(0, 0, screen.xsize, screen.ysize, 0, 0, 0, start.fadeValue)
	endif
end event

event ObjectStartup
	object.drawOrder = 6
	
	object[21].Type = 40 //Pause Menu, TypeName does not work since it's in gameconfig
	object[21].priority = PRIORITY_ACTIVE

    	LoadSpriteSheet("Global/PauseMenu.gif")
	SpriteFrame(-8, -7, 16, 14, 1, 241)		//0 Eggman
	SpriteFrame(-84, -240, 84, 240, 0, 0)	//1 Main

	SpriteFrame(0, 0, 191, 45, 85, 3)		//2 
	SpriteFrame(0, 0, 191, 45, 85, 50)		//3
	SpriteFrame(0, 0, 191, 45, 85, 97)		//4
	SpriteFrame(0, 0, 191, 45, 85, 144)		//5

	SpriteFrame(-53, 0, 20, 10, 0, 243)	//6 shadow triangle

	SpriteFrame(0, 0, 191, 45, 219, 192)		//7
end event

event RSDKDraw
	DrawSprite(0)
end event

event RSDKLoad
	LoadSpriteSheet("Global/Display.gif")
	SpriteFrame(-16, -16, 32, 32, 223, 172)
end event